home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / interferencecircles / intercircles.s < prev    next >
Text File  |  1980-01-03  |  6KB  |  446 lines

  1. ; Interference Circles, Just both playfields offsetted using plane Pointers
  2. ; and hardware offset, the clever bit is only HALF of a circle is used, the
  3. ; Bottom half is the top half reversed using a Negative Modulo
  4.  
  5.     Section    "Base Code",Code_c
  6.  
  7. aa    bsr    Start
  8. bb    rts
  9.  
  10. Start    Movem.l    d0-d7/a0-a6,-(sp) 
  11.     Bsr    KillSys      
  12.     
  13.     Lea    CopperList(pc),a0 
  14.     Lea    HardWare,a6      
  15.     Move.l    a0,Cop1Lc(a6)      
  16.     Move.w    #$83c0,DMACon(a6)
  17.     
  18. Loop    Bsr    VBL    
  19.     Bsr    DoXYSine
  20.     Bsr    SetCircle
  21.     Btst    #6,$Bfe001      
  22.     Bne    Loop      
  23.         
  24.     Bsr    ReturnSys      
  25.     Movem.l    (sp)+,d0-d7/a0-a6 
  26.     Moveq    #0,d0      
  27.     Rts
  28.  
  29. SetCircle    Lea    CopperBPLS(pc),a0
  30.     Lea    CopperPos(pc),a1
  31.     Lea    CircleGFX(pc),a2
  32.     Lea    CircleXYPos(pc),a3
  33.     Lea    CopperModA(pc),a5
  34.     Move.w    #0,2(a1)
  35.     Bsr    DoCircle
  36.     Or.w    d1,2(a1)
  37.     Lea    CopperModB(pc),a5
  38.     Lea    CopperBPLS1(pc),a0
  39.     Lea    CopperPos(pc),a1
  40.     Lea    CircleGFX(pc),a2
  41.     Lea    CircleXYPosa(pc),a3
  42.     Bsr    DoCircle
  43.     Asl.w    #4,d1
  44.     Or.w    d1,2(a1)
  45.     Bsr    SetPriority
  46.     Rts
  47.     
  48. DoCircle    Moveq    #0,d0
  49.     Moveq    #0,d2
  50.     Moveq    #0,d3
  51.     Moveq    #0,d4
  52.     
  53.     Move.w    2(a3),d4
  54.     Move.w    #271-16,d0
  55.     Sub.w    d4,d0
  56.     
  57.     Bsr    SetWait
  58.     Move.w    2(a3),d0
  59.     Add.w    #32,d0
  60.     Move.l    #64,d1
  61.     Muls    d0,d1
  62.     Add.l    d1,a2
  63.     
  64.     Move.w    0(a3),d0
  65.     Add.w    #5,d0
  66.     Asr.w    #3,d0
  67.     Bclr    #0,d0
  68.     Add.l    d0,a2
  69.     Move.w    0(a3),d0
  70.     Add.w    #5,d0
  71.     And.w    #15,d0
  72.     Move.w    #15,d1
  73.     Sub.w    d0,d1
  74.     Move.w    d1,d0
  75.     And.w    #15,d0
  76.     Move.w    d0,d1    
  77.     Move.l    a2,d0
  78.     Move.w    d0,6(a0)
  79.     Swap    d0
  80.     Move.w    d0,2(a0)
  81.     Rts
  82.  
  83. SetWait    Cmpi.w    #$100,d0
  84.     Bls    NoPalCopper
  85.     Move.l    #$ffe1fffe,(a5)
  86.     Sub.w    #$100,d0
  87.     Move.b    d0,4(a5)
  88.     Rts
  89. NoPalCopper    Move.l    #$01fc0000,(a5)
  90.     Move.b    d0,4(a5)    
  91.     Rts
  92.     
  93. SetPriority    Lea    CopperModA(pc),a0
  94.     Move.w    CircleXYPos+2(pc),d0
  95.     Move.w    CircleXYPosa+2(pc),d1
  96.     
  97.     Cmp.w    d0,d1
  98.     Ble    NoChange
  99.     
  100.     Move.l    00(a0),d0
  101.     Move.l    04(a0),d1
  102.     Move.l    12(a0),00(a0)
  103.     Move.l    16(a0),04(a0)
  104.     Move.l    d0,12(a0)
  105.     Move.l    d1,16(a0)
  106.     Move.l    #$010aff92,08(a0)
  107.     Move.l    #$0108ff92,20(a0)
  108.     Rts
  109. NoChange    Move.l    #$0108ff92,08(a0)
  110.     Move.l    #$010aff92,20(a0)
  111.     Rts
  112.     
  113. DoXYSine    Lea    CircleXYPos(pc),a4
  114.     Lea    SineXPt(pc),a5
  115.     Bsr    DoSine
  116.     Move.w    d3,(a4)
  117.     Lea    CircleXYPos+2(pc),a4
  118.     Lea    SineYPt(pc),a5
  119.     Bsr    DoSine
  120.     Move.w    d3,(a4)
  121.     Lea    CircleXYPos(pc),a4
  122.     And.w    #511,0(a4)
  123.     And.w    #511,2(a4)
  124.     Lea    CircleXYPosa(pc),a4
  125.     Lea    SineXPta(pc),a5
  126.     Bsr    DoSine
  127.     Move.w    d3,(a4)
  128.     Lea    CircleXYPosa+2(pc),a4
  129.     Lea    SineYPta(pc),a5
  130.     Bsr    DoSine
  131.     Move.w    d3,(a4)
  132.     Lea    CircleXYPosa(pc),a4
  133.     And.w    #511,0(a4)
  134.     And.w    #511,2(a4)
  135.     Rts
  136.  
  137. DoSine    Lea    SineData(pc),a6
  138.     Moveq    #0,d2
  139.     Moveq    #0,d3
  140.     Move.l    08(a5),d0
  141.     Move.l    12(a5),d1
  142.     Add.l    d0,00(a5)
  143.     Add.l    d1,04(a5)
  144.     And.l    #$ffe,00(a5)    
  145.     And.l    #$ffe,04(a5)    
  146.     Move.l    00(a5),d0
  147.     Move.l    04(a5),d1    
  148.     Move.w    (a6,d0.l),d2
  149.     Move.w    (a6,d1.l),d3    
  150.     Add.l    d2,d3    
  151.     Asr.w    #3,d3
  152.     Add.w    #2416,d3
  153.     
  154.     Muls    #1000,d3
  155.     Divs    #1500,d3
  156.     Rts        
  157.  
  158. KillSys    Bsr.s    SysWait    
  159.  
  160.     Move.l    $4,a6    
  161.     Lea    GFXName(pc),a1    
  162.     Moveq    #0,d0    
  163.     Jsr    -552(a6)    
  164.         
  165.     Lea    OldCop1(pc),a5
  166.     Move.l    $26(a0),$0(a5)    
  167.     Move.l    $32(a0),$4(a5)    
  168.     
  169.     Lea    HardWare,a6
  170.     Move.w    IntEnaR(a6),d0    
  171.     Move.w    DMAConR(a6),d1  
  172.     Or.w    #$8000,d0    
  173.     And.w    #$03ff,d1    
  174.     Or.w    #$8000,d1    
  175.     Move.w    d0,$8(a5)    
  176.     Move.w    d1,$a(a5)    
  177.     
  178.     Move.w    #$7fff,IntEna(a6) 
  179.     Move.w    #$7fff,DMACon(a6) 
  180.     Rts
  181.  
  182. SysWait    Move.w    #15,d7    
  183. SysWaitLoop    Move.l    #$05000,d1    
  184.     Bsr.s    WaitVBL    
  185.     Bsr.s    VBL    
  186.     Dbf    d7,SysWaitLoop    
  187.     Rts
  188.  
  189. VBL    Move.l    #$13000,d1    
  190. WaitVBL    Movem.l    d0-d1/a6,-(sp)    
  191.     Lea    HardWare,a6    
  192. WaitVBLLoop    Move.l    VPosR(a6),d0    
  193.     And.l    #$1ff00,d0    
  194.     Cmp.l    d1,d0    
  195.     Bne.s    WaitVBLLoop    
  196.     Movem.l    (sp)+,d0-d1/a6    
  197.     Rts        
  198.  
  199. ReturnSys    Lea    HardWare,a6    
  200.     Move.w    OldIntEna(pc),IntEna(a6)
  201.     Move.w    OldDMACon(pc),DMACon(a6)
  202.     Move.l    OldCop1(pc),Cop1lc(a6)
  203.     Move.l    OldCop2(pc),Cop2lc(a6)
  204.     Rts    
  205.  
  206. GFXName    Dc.b    "graphics.library",0
  207.     Even
  208. OldCop1    Dc.l    0    
  209. OldCop2    Dc.l    0    
  210. OldIntEna    Dc.w    0    
  211. OldDmaCon    Dc.w    0
  212.  
  213. CircleXYPos    Dc.w    0
  214.     Dc.w    0
  215. CircleXYPosa    Dc.w    0
  216.     Dc.w    0
  217.  
  218. SineXPt    Dc.l    $1fe
  219. SineXPt1    Dc.l    0
  220. SineXAdd    Dc.l    -$20
  221. SineXAdd1    Dc.l    -$22
  222.  
  223. SineYPt    Dc.l    0
  224. SineYPt1    Dc.l    0
  225. SineYAdd    Dc.l    $20
  226. SineYAdd1    Dc.l    $20
  227.  
  228. SineXPta    Dc.l    0
  229. SineXPt1a    Dc.l    0
  230. SineXAdda    Dc.l    -$20
  231. SineXAdd1a    Dc.l    -$20
  232.  
  233. SineYPta    Dc.l    $1fe
  234. SineYPt1a    Dc.l    0
  235. SineYAdda    Dc.l    $24
  236. SineYAdd1a    Dc.l    $20
  237.  
  238. Cmv    Macro
  239.     Dc.w    \2,\1
  240.     EndM
  241.     
  242. Cwt    Macro
  243.     Dc.w    (\1*$100)+$01,$fffe
  244.     EndM    
  245.     
  246. CwtBlit    Macro
  247.     Dc.w    $1,0
  248.     EndM    
  249.  
  250. Pal    Macro
  251.     Dc.w    $ffe1,$fffe
  252.     EndM    
  253.  
  254. EndCop    Macro
  255.     Dc.w    $ffff,$fffe
  256.     EndM    
  257.  
  258. CopperList    Cwt    $15    
  259.     Cmv    $0200,BplCon0    
  260. CopperPos    Cmv    $00bb,BplCon1    
  261.     Cmv    $000a,BplCon2    
  262.     Cmv    $1661,DiwStrt    
  263.     Cmv    $36f1,DiwStop
  264.     Cmv    $0028,DdfStrt    
  265.     Cmv    $00d8,DdfStop    
  266.     Cmv    $0012,BplMod1
  267.     Cmv    $0012,BplMod2
  268.     
  269.     Cwt    $1f        
  270.     Cmv    $0000,Color00
  271.     Cmv    $0000,Color01
  272.     Cmv    $0000,Color02
  273.     Cmv    $0fff,Color03
  274.     
  275. CopperBPLS    Cmv    $c,BplPt0h    
  276.     Cmv    $0,BplPt0l    
  277. CopperBPLS1    Cmv    $0,BplPt1h    
  278.     Cmv    $0,BplPt1l    
  279.  
  280.     Cwt    $20
  281.     Cmv    $2200,BplCon0    
  282.     
  283. CopperModA    Cmv    $0,$1fe
  284.     Cwt    $28
  285.     Cmv    $ff92,BplMod1
  286. CopperModB    Cmv    $0,$1fe
  287.     Cwt    $28
  288.     Cmv    $ff92,BplMod2
  289.     
  290.     EndCop
  291.  
  292.         incdir    coding:projects/source/phagexrips/
  293. SineData    Incbin    SysData/Sine1024Bs.Dat
  294.     Incbin    SysData/Sine1024Bs.Dat
  295.  
  296. CircleGFX    Incbin    Bitmaps/Circle1.Raw
  297.  
  298. ****Custom Chip Registers****
  299.  
  300. Hardware    = $Dff000
  301.  
  302. ;Control Registers
  303.  
  304. Dmaconr    = $002
  305. Vposr    = $004
  306. Vhposr    = $006
  307. Joy0dat    = $00A
  308. Joy1dat    = $00C
  309. Clxdat    = $00E
  310. Intenar    = $01C
  311. Intereqr    = $01E
  312. Copcon    = $02E
  313.  
  314. ;Blitter Registers
  315.  
  316. Bltcon0    = $040
  317. Bltcon1    = $042
  318. Bltafwm    = $044
  319. Bltalwm    = $046
  320. Bltcpth    = $048
  321. Bltcptl    = $04A
  322. Bltbpth    = $04C
  323. Bltbptl    = $04E
  324. Bltapth    = $050
  325. Bltaptl    = $052
  326. Bltdpth    = $054
  327. Bltdptl    = $056
  328. Bltsize    = $058
  329. Bltcmod    = $060
  330. Bltbmod    = $062
  331. Bltamod    = $064
  332. Bltdmod    = $066
  333. Bltcdat    = $070
  334. Bltbdat    = $072
  335. Bltadat    = $074
  336.  
  337. ;Copper Registers
  338.  
  339. Cop1lc    = $080
  340. Cop1lch    = $080
  341. Cop1lcl    = $082
  342. Cop2lc    = $084
  343. Cop2lch    = $084
  344. Cop2lcl    = $086
  345. Copjmp1    = $088
  346. Copjmp2    = $08A
  347. Diwstrt    = $08E
  348. Diwstop    = $090
  349. Ddfstrt    = $092
  350. Ddfstop    = $094
  351. Dmacon    = $096
  352. Clxcon    = $098
  353. Intena    = $09A
  354. Intreq    = $09C
  355.  
  356. ;BitPlane Registers 
  357.  
  358. BplCon0    = $100
  359. BplCon1    = $102
  360. BplCon2    = $104
  361. BplMod1    = $108
  362. BplMod2    = $10a
  363.  
  364. BplPt0h    = $0e0
  365. BplPt0l    = $0e2
  366. BplPt1h    = $0e4
  367. BplPt1l    = $0e6
  368. BplPt2h    = $0e8
  369. BplPt2l    = $0ea
  370. BplPt3h    = $0ec
  371. BplPt3l    = $0ee
  372. BplPt4h    = $0f0
  373. BplPt4l    = $0f2
  374. BplPt5h    = $0f4
  375. BplPt5l    = $0f6
  376.  
  377. ;Colour Registers
  378.  
  379. Color00    = $180
  380. Color01    = $182
  381. Color02    = $184
  382. Color03    = $186
  383. Color04    = $188
  384. Color05    = $18a
  385. Color06    = $18c
  386. Color07    = $18e
  387. Color08    = $190
  388. Color09    = $192
  389. Color10    = $194
  390. Color11    = $196
  391. Color12    = $198
  392. Color13     = $19a
  393. Color14     = $19c
  394. Color15     = $19e
  395. Color16     = $1a0
  396. Color17     = $1a2
  397. Color18     = $1a4
  398. Color19     = $1a6
  399. Color20     = $1a8
  400. Color21     = $1aa
  401. Color22     = $1ac
  402. Color23     = $1ae
  403. Color24     = $1b0
  404. Color25     = $1b2
  405. Color26     = $1b4
  406. Color27     = $1b6
  407. Color28     = $1b8
  408. Color29     = $1ba
  409. Color30     = $1bc
  410. Color31     = $1be
  411.  
  412. EcsNop    = $1fe
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.